﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GS1.Entidad;
using System.Data;
using GS1.DataAccess;
using log4net;

namespace GS1.Datos
{
    /// <summary>
    /// Clase       : EtiquetaDA
    /// Descripcion : Contiene la datos de Etiqueta
    /// Autor       : Gustavo Susano
    /// Fecha       : 04/04/2013
    /// Empresa     : GS1 Peru
    /// </summary>
    public class EtiquetaDA
    {
        #region --- Variables y Constantes ---
        private static readonly ILog log = LogManager.GetLogger(typeof(EtiquetaDA));

        // Nombre procedimiento almacenado
        private const string PROCEDIMIENTO_RFID_BUSCARETIQUETA = "RFID.SERVIR_sp_BuscarEtiqueta";

        // Parametros Entrada
        private const string PARAM_COD_EPC = "P_COD_EPC";
        
        // Parametros Salida
        private const string PARAM_CURSOR = "O_CURSOR";

        private const string CODEPC = "COD_EPC";
        private const string IDEXPEDIENTE = "ID_EXPEDIENTE";
        private const string ANIO = "ANIO";
        private const string NUMEROEXPEDIENTE = "NUMERO_EXPEDIENTE";
        private const string NUMTOMO = "NUM_TOMO";
        private const string NUMIMPRESION = "NUM_IMPRESION";
        private const string FECIMPRESION = "FEC_IMPRESION";
        private const string ESTADO = "ESTADO";
        private const string ESTADOPRESTAMO = "ESTADO_PRESTAMO";
        private const string IDUSUARIO = "ID_USUARIO";
        private const string DESCPRESTAMO = "DESC_PRESTAMO";
        
        #endregion

        #region --- Metodos Propios ---
        public Etiqueta obtenerEtiqueta(Etiqueta etiqueta)
        {
            Etiqueta etiquetaResultado = null;

            DataSet dsEtiqueta = new DataSet();

            if (log.IsDebugEnabled)
            {
                log.Debug("obtenerEtiqueta(" + etiqueta.epc + ")");
            }

            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexServir))
            {
                db.NombreProcedimiento = PROCEDIMIENTO_RFID_BUSCARETIQUETA;
                db.agregarParametro(PARAM_COD_EPC, DbType.String, ParameterDirection.Input, etiqueta.epc);
                db.agregarParametro(PARAM_CURSOR, DbType.Binary, ParameterDirection.Output, null);
                
                IDataAdapter dataAdapter = db.obtenerDataAdapter();
                dataAdapter.Fill(dsEtiqueta);

                if (dsEtiqueta.Tables.Count > 0)
                {
                    etiquetaResultado = generarEntidad(dsEtiqueta.Tables[0].Rows[0]);

                }
            }

            return etiquetaResultado;
        }

        private Etiqueta generarEntidad(DataRow fila)
        {
            Etiqueta etiqueta = new Etiqueta();
            Expediente expediente = new Expediente();
            Usuario usuario = new Usuario();
            
            etiqueta.epc = fila[CODEPC].ToString();

            expediente.idExpediente = Convert.ToInt32(fila[IDEXPEDIENTE]);
            expediente.anio = fila[ANIO].ToString();
            expediente.numero = fila[NUMEROEXPEDIENTE].ToString();

            etiqueta.nroTomo = Convert.ToInt32(fila[NUMTOMO]);
            etiqueta.nroImpresion = Convert.ToInt32(fila[NUMIMPRESION]);
            etiqueta.fechaImpresion = Convert.ToDateTime(fila[FECIMPRESION]);
            etiqueta.estado = fila[ESTADO].ToString();
            etiqueta.estadoPrestamo = fila[ESTADOPRESTAMO].ToString();
            
            usuario.idUsuario = fila[IDUSUARIO].ToString();
            //fila[DESCPRESTAMO].ToString();

            etiqueta.expediente = expediente;
            etiqueta.usuario = usuario;
             
            return etiqueta;
        }

        
        #endregion
    }
}